use crate::sketchbook::layout::NodePosition;
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Error, Formatter};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct LayoutNode {
position: NodePosition,
}
impl LayoutNode {
pub fn new(px: f32, py: f32) -> LayoutNode {
LayoutNode {
position: NodePosition(px, py),
}
}
pub fn get_position(&self) -> &NodePosition {
&self.position
}
pub fn get_px(&self) -> f32 {
self.position.0
}
pub fn get_py(&self) -> f32 {
self.position.1
}
}
impl LayoutNode {
pub fn change_position(&mut self, new_px: f32, new_py: f32) {
self.position.0 = new_px;
self.position.1 = new_py;
}
}
impl Display for LayoutNode {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
write!(f, "Node at [{}, {}]", self.position.0, self.position.1)
}
}
impl Default for LayoutNode {
fn default() -> LayoutNode {
LayoutNode::new(0., 0.)
}
}
#[cfg(test)]
mod tests {
use crate::sketchbook::layout::{LayoutNode, NodePosition};
#[test]
fn test_layout_node() {
let mut node = LayoutNode::new(0., 1.);
assert_eq!(
node.get_position(),
&NodePosition(node.get_px(), node.get_py())
);
node.change_position(0., 0.);
let same_node = LayoutNode::default();
assert_eq!(node, same_node);
}
}